import 'package:demo_day_1/services/api_client.dart';
import 'package:demo_day_1/models/user.dart';
import 'package:demo_day_1/models/repository.dart'; // 确保导入 Repository 模型

class GitcodeService {
  final ApiClient _apiClient = ApiClient(); // 获取 ApiClient 的单例实例

  // 设置 Access Token 的方法
  void setAccessToken(String? token) {
    _apiClient.setAccessToken(token);
  }

  // 模拟登录 (实际是设置 token)
  Future<bool> login(String token) async {
    if (token.isNotEmpty) {
      setAccessToken(token);
      // 尝试获取用户自身信息来验证 token 是否有效
      try {
        await getCurrentUser(); // 验证 token
        return true;
      } catch (e) {
        setAccessToken(null); // 验证失败，清除 token
        print('Token verification failed: $e');
        return false;
      }
    }
    return false;
  }

  // 获取当前登录用户的信息 (用于验证 token 或显示用户信息)
  Future<User> getCurrentUser() async {
    try {
      final response = await _apiClient.get('/user'); // 直接使用封装的 get 方法
      if (response.statusCode == 200) {
        return User.fromJson(response.data);
      } else {
        throw Exception('Failed to load current user: ${response.statusCode}');
      }
    } catch (e) {
      // 这里的 catch 会捕获 ApiClient 中重新抛出的 DioException
      // 可以在这里做一些服务层特有的处理，或者直接抛出
      print('Error in getCurrentUser: $e');
      rethrow;
    }
  }

  // 获取当前用户的所有仓库
  Future<List<Repository>> getCurrentUserRepositories() async {
    try {
      final response = await _apiClient.get('/user/repos'); // 直接使用封装的 get 方法
      if (response.statusCode == 200) {
        List<dynamic> data = response.data;
        return data.map((json) => Repository.fromJson(json)).toList();
      } else {
        throw Exception('Failed to load repositories: ${response.statusCode}');
      }
    } catch (e) {
      print('Error in getCurrentUserRepositories: $e');
      rethrow;
    }
  }
}
